package cn.itcast.zt.advice;

import cn.itcast.zt.exceptions.CheckException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.support.WebExchangeBindException;

import javax.validation.Valid;

/**
 * 异常处理切面
 * created by zhangtian on 2018/7/9
 */
@ControllerAdvice
public class CheckAdvice {
    @ExceptionHandler(WebExchangeBindException.class)
    public ResponseEntity handleBindException(WebExchangeBindException e){
        return new ResponseEntity<String>(toStr(e), HttpStatus.BAD_REQUEST) ;
    }

    @ExceptionHandler(CheckException.class)
    public ResponseEntity handleCheckException(CheckException e){
        return new ResponseEntity<String>(toStr(e), HttpStatus.BAD_REQUEST) ;
    }

    /**
     * 将校验异常转换为字符串
     * @param ex
     * @return
     */
    private String toStr(WebExchangeBindException ex) {
        return ex.getFieldErrors().stream()
                .map(e->e.getField() + ":" + e.getDefaultMessage())
                .reduce("", (s1, s2)->s1 + "\n" + s2);
    }

    /**
     * 将校验异常转换为字符串
     * @param ex
     * @return
     */
    private String toStr(CheckException ex) {
        return ex.getFieldName() + ":错误的值 " + ex.getFieldValue() ;
    }
}
